package com.songxh.facade.controller;

import com.songxh.application.api.BlogHomePageService;
import com.songxh.application.dto.home.ArticleDTO;
import com.songxh.application.dto.home.HotTagsDTO;
import com.songxh.core.annotation.Cache;
import com.songxh.core.base.CommonResult;
import com.songxh.core.page.PageData;
import com.songxh.core.page.PageDataGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 博客页接口
 * @author songxh
 * @create 2022-12-19-17:19
 */
@RestController
@RequestMapping("/gra/songxh/blog")
public class BlogHomePageController {

    @Autowired
    protected HttpServletRequest request;

    @Autowired
    private BlogHomePageService blogHomePageService;

    /**
     * 博客首页展示
     * @param pageData
     * "tagId": 在点击最热标签时进行筛选
     * "isHotArticle": 最热文章的排序，根据浏览量来排序
     * "isNewArticle": 最新文章的排序
     * "categoryId": 品类，在详情页中点击品类即可进入该品类，搭配作者id使用,
     * "authorId": 作者id，搭配其他id使用
     * "year"： 根据时间分类时的 年
     * "month"： 根据时间分类时的 月，可以根据这个来查询该作者在这个时间段的文章
     * @return
     */
    @Cache(name = "博客页面展示") //讲数据保存到缓存中，方便下次调用
    @PostMapping("/blogPage")
    public CommonResult<PageData<ArticleDTO>> blogPage(@RequestBody PageData pageData){
        //判断是否分页
        PageData page = PageDataGenerator.newInstall(request, true, pageData);
        PageData<ArticleDTO> articleDTOPageData = blogHomePageService.articleList(page);
        return CommonResult.success(articleDTOPageData);
    }

    /**
     * 获取最热标签，点击标签可展示该标签下所有的文章
     * @return
     */
    @Cache(name = "获取最热标签")  //讲数据保存到缓存中，方便下次调用
    @PostMapping("/hotTags")
    public CommonResult<List<HotTagsDTO>> getHotTags(){
        List<HotTagsDTO> hotTags = blogHomePageService.getHotTags();
        return CommonResult.success(hotTags);
    }

}
